VBA, range.resize() 的用法,省略列数尤其注意要省略 逗号,resize()里的参数不能是0或负数 您所在的位置:网站首页 vba 行数组 VBA, range.resize() 的用法,省略列数尤其注意要省略 逗号,resize()里的参数不能是0或负数

VBA, range.resize() 的用法,省略列数尤其注意要省略 逗号,resize()里的参数不能是0或负数

2023-08-17 18:07| 来源: 网络整理| 查看: 265

 

range().resize(x,y) 方法 语法 Range(i,j).resize(行数,列数)   resize(x,y) 表示的区域,x是行,往下。Y是列,往右。重新定位出来的区域

 

resize() 得出的是一个区域范围!!!因为X 是表示行数,必须大于0因为Y是表示列数,必须大于0resize(x,y)可以为负数吗?比如 resize(-1,-1)        NO resize(x,y)可以为0吗?  比如 resize(1,0)      NO

 

range().resize()的区域和range()关系不大range() 提供了一个基点值  range(i,j).resize(1,1) 就表示位置不变

 

省略写法 Resize(,3) 表示不改变range()区域的行数 (注意不是行号,是行数!)Resize(3,) 错误写法Resize(3)  正确写法,表示不改变列数,逗号都省略,只改变行数Range(,)   错误写法

 

 application.index() 结合 range.resize() 用法 注意 application.index() 取出来的1行,resize() 也是一行,那么直接就匹配注意 application.index() 取出来的1列,resize() 也是一列,那么直接就匹配---反而不能转置application.transpose()

 

 

 2 代码1:例子 Sub Jackma2() arr1 = Range("d1:g3") arr2 = Application.Index(arr1, 1, 0) arr3 = Application.Index(arr1, 0, 3) Debug.Print "arr2= "; For Each i In arr2 Debug.Print i; Next Debug.Print 'Debug.Print LBound(arr2, 1) 'Debug.Print UBound(arr2, 1) 'Debug.Print LBound(arr2, 2) '发现range用index取出一行,居然不再是2维,而是1维数组 'Debug.Print UBound(arr2, 2) '下面错误原因是,因为把这个当2维数组了 'Cells(5, 4).Resize(0, UBound(arr2, 2)) = Application.Transpose(Application.Transpose(arr2)) 'Cells(5, 4).Resize(0, UBound(arr2, 2)).Interior.ColorIndex = 3 '写回excel 'Cells(5, 4).Resize(0, UBound(arr2, 1)) = arr2 '这样会报错!,写0不行? Cells(5, 4).Resize(, UBound(arr2, 1)) = arr2 '这样会报错! Cells(5, 4).Resize(, UBound(arr2, 1)).Interior.ColorIndex = 3 Debug.Print "arr3= "; For Each j In arr3 Debug.Print j; Next Debug.Print 'Debug.Print LBound(arr3, 1) 'Debug.Print UBound(arr3, 1) 'Debug.Print LBound(arr3, 2) '发现range用index取出一列,还是2维数组 'Debug.Print UBound(arr3, 2) '写回excel 'Cells(1, 9).Resize(UBound(arr3, 1), 1) = Application.Transpose(arr3) 会导致取出来的回填EXCEL的全是3 '因为resize的形状也是列,反而只能用列直接怼进去,用行,只会取到第1个元素 Cells(1, 9).Resize(UBound(arr3, 1), 1) = Application.Transpose(arr3) Cells(1, 9).Resize(UBound(arr3, 1), 1).Interior.ColorIndex = 6 End Sub

 

各种情况有点奇怪

 

Sub test5() 'VBA很多东西都比较奇怪,不能想当然 '不要太直觉,反直觉的! '这个可以 Cells(5, 4) = Cells(1, 4) Cells(5, 5) = Cells(1, 5) '这个不行 Range("j1:m3") = Range("d1:g3") '这个可以 arr1 = Range("d1:g3") Range("j5:m7") = arr1 '这个居然也可以,range指定并非需要左下右上,其他指定区域方式也可以 Range("j11:m9") = arr1 '这个可以 Range("j13").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1 Range("j13").Resize(UBound(arr1, 1), UBound(arr1, 2)).Interior.ColorIndex = 6 '这个不可以? 'Cells(17, 9).Resize(UBound(arr1, 1), UBound(arr, 2)) = arr1 'Cells(17, 9).Resize(UBound(arr1, 1), UBound(arr, 2)).Interior.ColorIndex = 6 '这个不可以? '[j21].Resize(UBound(arr1, 1), UBound(arr, 2)) = arr1 '[j21].Resize(UBound(arr1, 1), UBound(arr, 2)).Interior.ColorIndex = 6 End Sub

 

 

这样也没问题

cells().resize()[].resize和range().resize() 都是可以的 Sub test800() arr = Range(("a2:b") & Range("a6555").End(xlUp).Row) [e2].Resize(UBound(arr), 2) = arr [e2].Resize(UBound(arr), 2).Interior.ColorIndex = 7 Cells(2, 9).Resize(UBound(arr), 2) = arr Cells(2, 9).Resize(UBound(arr), 2).Interior.ColorIndex = 10 End Sub

 

这样写是可以的

http://blog.sina.com.cn/s/blog_4be3eccc0100cyl8.html 这个帖子里讨论的错误,可能因为时间久远,已经兼容了?

Sub test801() a = 6 Cells(1, 1).Resize(10, 10) = a Cells(1, 1).Resize(10, 10).Interior.ColorIndex = 6 Cells(1, 1).Resize(10, 10) = 8 Cells(1, 1).Resize(10, 10).Interior.ColorIndex = 8 b = Cells(1, 1).Resize(10, 10) For i = LBound(b, 1) To UBound(b, 1) For j = LBound(b, 2) To UBound(b, 2) Debug.Print b(i, j); Next Debug.Print Next End Sub

 

 

Sub test5() 'VBA很多东西都比较奇怪,不能想当然 '不要太直觉,反直觉的! '这个可以 Cells(5, 4) = Cells(1, 4) Cells(5, 5) = Cells(1, 5) '这个不行 Range("j1:m3") = Range("d1:g3") '这样可以 Range("j5:m7") = Range("d1:g3").Value '这个可以 arr1 = Range("d1:g3") Range("j9:m11") = arr1 '这个居然也可以,range指定并非需要左下右上,其他指定区域方式也可以 Range("j15:m13") = arr1 '这个可以 Range("j17").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1 Range("j17").Resize(UBound(arr1, 1), UBound(arr1, 2)).Interior.ColorIndex = 6 '这个可以 Cells(21, 10).Resize(3, 4) = arr1 Cells(21, 10).Resize(3, 4).Interior.ColorIndex = 6 '这个不可以? Cells(25, 10).Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1 Cells(25, 10).Resize(UBound(arr1, 1), UBound(arr1, 2)).Interior.ColorIndex = 7 [j29].Resize(3, 4) = arr1 [j29].Resize(4, 4).Interior.ColorIndex = 8 '这个不可以? [j29].Resize(UBound(arr1, 1), UBound(arr, 2)) = arr1 [j29].Resize(UBound(arr1, 1), UBound(arr, 2)).Interior.ColorIndex = 9 End Sub

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有